package com.shp.service;

import com.shp.pojo.Comments;
import com.shp.pojo.Good;
import com.shp.pojo.GoodsExtend;
import com.shp.pojo.ResultInfo;
import org.springframework.ui.Model;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * @author ZWL
 * @Version: 1.0
 * @create: 2020/2/24 18:34
 */
public interface GoodsService {

    /**
     * 保存图片数据到数据库
     * @param goodsId 商品的id
     * @param files MultipartFile[] 保存有图片信息
     * @return Map<String,MultipartFile>图片的新名称集合;否则返回null
     */
    public Map<String,MultipartFile> saveImagesToDb(MultipartFile[] files, int goodsId);


    /**
     * 保存商品信息到数据库
     * @param files MultipartFile[]
     * @param request HttpServletRequest
     * @param good 商品信息对象
     * @return true代表保存成功；否则保存失败
     */
    public boolean saveGoodsMsg(Good good, MultipartFile[] files,HttpServletRequest request);

    /**
     * 保存图片数据到磁盘
     * @param filesMap 图片数据Map
     * @return true代表保存成功；否则代表保存失败
     */
    public boolean saveImagesToDisk(Map<String,MultipartFile> filesMap);

    /**
     * 获取网站主页需要的所有商品信息
     * @param model org.springframework.ui
     * @return Model
     */
    public void setGoodsMsgOnIndex(Model model);

    /**
     * 获取商品的详细信息
     * @param model org.springframework.ui
     * @param id 商品id
     */
    public void setGoodsDetail(Model model, Integer id);

    /**
     * 添加评论信息到数据库
     * @param info 响应对象ResultInfo
     * @param comments 上传的评论信息
     * @param request HttpServletRequest
     * @return 响应对象ResultInfo
     */
    public ResultInfo addComments(ResultInfo info, Comments comments,HttpServletRequest request);

    /**
     * 根据发布日期，查询精选商品
     * @param size 商品数量
     * @return List<GoodsExtend>
     */
    public List<GoodsExtend> getSelectedGoodsByDate(int size);

    /**
     * 根据商品的分类id，查询指定数量的商品
     * @param id 分类id
     * @param size 商品个数
     * @return List<GoodsExtend>
     */
    public List<GoodsExtend> getCategoryGoodsByIdAndDate(Integer id,Integer size);

    /**
     * 根据商品分类id，查询该分类的所有商品,按照发布日期降序
     * 配合使用分页插件pageHelper，进行分页处理
     * @param categoryId 分类id
     * @return List<GoodsExtend>
     */
    public List<GoodsExtend> getCategoryGoodsList(Integer categoryId);

    /**
     * 查询所有的推荐的商品
     * 配合使用分页插件pageHelper，进行分页处理
     * @return List<GoodsExtend>
     */
    public List<GoodsExtend> getSelectedGoodsList();

    /**
     * 根据商品名称或描述，模糊查询商品
     * @param name 商品名称
     * @param describe 商品描述
     * @return List<GoodsExtend>
     */
    public List<GoodsExtend> searchGoodsList(String name,String describe);

    /**
     * 获取用户发布的商品
     * @param userId 用户的id
     * @return List<GoodsExtend>
     */
    public List<GoodsExtend> getUserGoods(Integer userId);

    /**
     * 根据商品的id和用户的id，查询商品
     * @param goodsId 商品id
     * @param userId 用户id
     * @return GoodsExtend
     */
    public GoodsExtend getUserByUserIdAndGoodsId(Integer goodsId,Integer userId);

    /**
     * 根据商品id , 获取商品
     * @param id 商品id
     * @return Good
     */
    public Good getGoodsByGoodsId(Integer id);

    /**
     * 根据商品id，修改商品信息
     * @param goods 商品
     * @return true代表修改成功，否则失败
     */
    public boolean updateGoods( Good goods);

    /**
     * 删除下架的商品
     * @param id 商品的id
     * @return true代表删除成功，否则失败
     */
    public boolean deleteGoods(Integer id);

    /**
     * 获取所有商品
     * @return List<goods>集合
     */
    public List<Good> getAll();

    /**
     * 批量删除商品
     * @param ids 商品id数组
     * @return true删除成功；false删除失败
     */
    public boolean deleteGoodsBatch(Integer[] ids);

    /**
     * 获取商品的图片
     * @param ids Integer[] ids
     * @return List<String>
     */
    public List<String> getGoodsImages(Integer[] ids);

    /**
     * 查询所有符合条件（goods）的商品
     * @param goods 条件
     * @return List<Good>
     */
    public List<Good> getGoodsBySelect(Good goods);
}

